import json


class JsonObject:
    def __init__(self, **kwargs):
        # 动态设置属性，将 JSON 键值对映射到对象属性
        for key, value in kwargs.items():
            setattr(self, key, value)

    def __repr__(self):
        # 打印对象时，显示为类名和属性
        return f"{self.__class__.__name__}({self.__dict__})"


class JsonConverter:
    @staticmethod
    def json_to_object(json_str, cls=JsonObject):
        """
        将 JSON 字符串转换为对象。

        :param json_str: JSON 字符串
        :param cls: 目标类，默认为 JsonObject
        :return: 转换后的对象
        """
        try:
            data = json.loads(json_str)
            return cls(**data)
        except json.JSONDecodeError as e:
            print(f"JSON 解码错误: {e}")
            return None

    @staticmethod
    def object_to_json(obj):
        """
        将对象转换为 JSON 字符串。

        :param obj: 需要转换的对象
        :return: JSON 字符串
        """
        try:
            return json.dumps(obj.__dict__, indent=4)
        except TypeError as e:
            print(f"对象转换为 JSON 失败: {e}")
            return None


# 使用示例
if __name__ == "__main__":
    # JSON 字符串
    json_data = '{"name": "John", "age": 30, "email": "john@example.com"}'

    # JSON 转对象
    person = JsonConverter.json_to_object(json_data)
    print(f"对象: {person}")

    # 对象转 JSON
    json_str = JsonConverter.object_to_json(person)
    print(f"JSON: {json_str}")
